package com.kongwg.exer;

import java.util.concurrent.locks.ReentrantLock;

/**
 * 有两个储户分别向同一个账户存3000元，每次存1000，存3次。每次存完打印账户余额。
 *
 * 分析：
 * 1.是否是多线程问题？ 是，两个储户线程
 * 2.是否有共享数据？ 有，账户（或账户余额）
 * 3.是否有线程安全问题？有
 * 4.需要考虑如何解决线程安全问题？同步机制：有三种方式。
 *
 * @author kongwg
 * @create 2020-12-05 17:45
 */


class Customer implements Runnable {
    private double balance = 0;
    private ReentrantLock lock = new ReentrantLock();


    @Override
    public void run() {
        for (int j = 0; j < 3; j++) {
            try {
                lock.lock();
            add();
            }finally{
                lock.unlock();
            }

        }
    }

    private void add() {
        balance += 1000;
        System.out.println(Thread.currentThread().getName()+ "存钱成功，余额为：" + balance);
    }
}

public class AccountTest {
    public static void main(String[] args) {

        Customer c = new Customer();

        Thread t1 = new Thread(c);
        Thread t2 = new Thread(c);

        t1.setName("顾客1");
        t2.setName("顾客2");

        t1.start();
        t2.start();

    }
}
